//#include<bits/stdc++.h>
//using namespace std;
//int main()
//{
//	int n, k, l;
//	vector<int> ll;
//	cin >> n >> k;
//	int res = 0;
//	int lmin = INT_MAX;
//	for (int i = 0; i < n; i++) {
//		cin >> l;
//		ll.push_back(l);
//		lmin = min(lmin, l);
//	}
//	for (int i = lmin; i > 0; i--) {
//		int sum = 0;
//		for (int j = 0; j < n; j++) {
//			sum += ll[j] / i;
//		}
//		if (sum >= k) {
//			res = i;
//			break;
//		}
//	}
//	cout << res << endl;
//	return 0;
//}
////48/100 3WA 2TLE

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n, k;
	cin >> n >> k;
	vector<int> ll(n);
	for (int i = 0; i < n; i++) {
		cin >> ll[i];
	}
	sort(ll.begin(), ll.end());
	int left = 1;
	int right = ll[n - 1];
	int result = 0;
	while (left <= right) {
		int mid = left + (right - left) / 2; // 二分查找
		int count = 0;
		// 统计 可以得到的小段数量
		for (int i = 0; i < n; i++) {
			count += ll[i] / mid;
		}
		if (count >= k ) {
			result = max(result, mid); // 更新
			left = mid + 1;
		} else {
			right  = mid - 1;
		}
	}
	cout << result << endl;
	return 0;
}
